/*
模拟数据参数说明：
    '/xxx/xxx'                  [为正则地址 默认请求方式为get]
    '/xxx/xxx@1 | /xxx/xxx @1'  [为正则地址 @是否启用(1启用，0不启用，默认跟随整体开关)]
    '/xxx/xxx get'              [为正则地址 请求方式]
    '/xxx/xxx get@0'            [为正则地址 请求方式@是否启用(1启用，0不启用，默认跟随整体开关)]
三层控制说明：
全局开关(VITE_APP_MOCK)       整体开关(VITE_ALL_MOCK)          局部开关@           最终状态
        false                       任意                    任意                禁用
        true                        true                    @0                 禁用
        true                        true                    @1 或不设置         启用
        true                        false                   @0 或不设置         禁用
        true                        false                   @1                 启用
*/

import Mock from 'mockjs'
import commonMock from './modules/common'


// 设置200-900ms随机延时
Mock.setup({
    timeout: '200-900'
})

// 注册所有模块
const mockModules = [
    commonMock,
]

//路由健壮性处理
const specificRoutes = (url) => {
    // 变量初始声明
    let method = 'get'
    let localEnable = null

    // 先处理 @
    if (url.includes('@')) {
        const [urlPart, enablePart] = url.split('@')
        localEnable = enablePart.trim()
        url = urlPart.trim()
    }
    // 再处理空格，且只在剩余部分里找
    if (url.includes(' ')) {
        const parts = url.split(' ')
        url = parts[0].trim()
        method = (parts[1] || 'get').trim().toLowerCase()
    }
    return { url, method, localEnable }
}


// 启动所有的mock
const enableMock = () => {

    // 获取全局开关状态 (优先级最高)
    const globalMockEnabled = import.meta.env.VITE_APP_MOCK === 'true'

    // 获取整体开关状态（控制所有对象）
    const appMockAllEnabled = import.meta.env.VITE_ALL_MOCK === 'true'

    // 全局开关关闭，所有 mock 禁用
    if (!globalMockEnabled) {
        console.log('Mock closed globally')
        return
    }

    // 遍历启动
    mockModules.forEach((mockModule) => {
        Object.entries(mockModule).forEach(([key, res]) => {
            let { url, method, localEnable } = specificRoutes(key)
            // console.log(url, method, localEnable)

            // 根据三层开关的组合逻辑决定是否启用mock
            // 整体关闭的情况：只启用明确声明了 @1 的接口
            let shouldEnable = false
            if (!appMockAllEnabled) {
                shouldEnable = localEnable === '1'
            }
            // 整体开启的情况：禁用明确声明了 @0 的接口，其他都启用
            else {
                shouldEnable = localEnable !== '0'
            }
            // 根据最终决策启用mock
            if (shouldEnable) {
                Mock.mock(new RegExp(url), method, res)
            }
        })
    })
    console.log('Mock enabled')
}

export default enableMock
